struct list {
	// object is a pointer into the heap
	// object[0] will be the GC header
	// object[1..] is the data
	
	scm *object;
	
	struct list *next;
	struct list *prev;
};

extern struct list *objects;

void objects_push(scm *obj);

scm *allocate(scm len);
scm allocate_strg(char *str, scm len);
scm allocate_cons(scm car, scm cdr);
scm allocate_vect(scm len, scm val);
scm allocate_clos(scm *lbl, scm len);
